self.importScripts("spark-md5.min.js");

onmessage = function (e) {
  let chunks = e.data;
  // 创建FileReader对文件进行读取
  const reader = new FileReader();
  // 创建sparkMd5的ArrayBuffer对象，进行增量计算md5值
  const spark = new SparkMD5.ArrayBuffer();
  let readIndex = 0;

  function loadNext() {
    // 递归调用结束条件，当没有chunk可以读取的时候
    if (chunks[readIndex]) {
      return reader.readAsArrayBuffer(chunks[readIndex]);
    }
    // 最终的md5值
    postMessage(spark.end());
  }

  reader.onload = (ev) => { 
    readIndex++;
    // 获取读取到的内容，这里可以计算一下进度
    const result = ev.target?.result;
    // 将内容添加到spark中，进行计算
    spark.append(result);
    // 继续下一个文件读取
    loadNext();
  };
  // 启动计算
  loadNext();
};
